const defaultOptions = {
    message: '',
    duration: 2000,
    delay: 0,
};
const formatOptions = (o, icon = 'none') => {
    const opt = { ...defaultOptions };
    if (['string', 'number'].includes(typeof o)) {
        opt.message = String(o);
    }
    else {
        Object.assign(opt, o);
    }
    return {
        title: opt.message,
        duration: opt.duration,
        icon: icon,
        delay: opt.delay,
    };
};
let timer;
const clearTimer = () => {
    if (!timer)
        return;
    clearTimeout(timer);
};
export const toast = (options) => {
    clearTimer();
    const o = formatOptions(options);
    timer = setTimeout(() => {
        delete o.delay;
        uni.showToast(o);
    }, o.delay);
};
toast.success = (options) => {
    clearTimer();
    const o = formatOptions(options, 'success');
    timer = setTimeout(() => {
        delete o.delay;
        uni.showToast(o);
    }, o.delay);
};
toast.error = (options) => {
    clearTimer();
    const o = formatOptions(options, 'error');
    timer = setTimeout(() => {
        delete o.delay;
        uni.showToast(o);
    }, o.delay);
};
toast.loading = (options) => {
    clearTimer();
    const o = formatOptions(options);
    timer = setTimeout(() => {
        delete o.delay;
        uni.showLoading({ title: o.title, mask: true });
    }, o.delay);
};
toast.clear = () => {
    clearTimer();
    uni.hideLoading();
    uni.hideToast();
};
